React Navigation v4
Reactのナビゲーションライブラリ
Docs
Hooks
github
v5の場合は↑を別途入れないといけない
https://reactnavigation.org/docs/use-navigation/
useNavigation
navigtion.state.paramではなくgetParamを使おう ref
const { name } = this.props.navigation.state.params;ではなく
const name = this.props.navigation.getParam('name', 'Peter');を使う
paramsにnamaeがないときに、Peterを入れてくる
ちがう?paramsがundefinedのときか?
つまりundefindで落ちなくなる
これさ、もし.state.params.name = undefinedだったらどうなるの?
つまりnameプロパティ自体はあるけど中身がundefinedであるとき
↑こうなるのってわざわざsetParams時にそのプロパティにundefined入れたときだけでは?
なので、そんなことしなければそうはならない
code:ts
// この2つは等価なのか?
navigation.getParam('userId') || '0';
navigation.getParam('userId', '0');
// こうする必要がある?
navigation.getParam('userId', '0') || '0';
createMaterialTopTabNavigator
こいつパフォーマンスやばくね?
今見ていないタブのactionも実行される
画面上部のタブを作る
react-native-tab-view
#やりたいこと
このタブをクリックしたときにページを上にスクロールしたい
twitterとかみたいに
案1https://github.com/react-navigation/react-navigation/issues/2955
案2 react-navigationのFlatListを使う
スタックに対する扱い
https://reactnavigation.org/docs/en/stack-actions.html#replace
push, pop以外にも、replace, resetなどもある
dismiss
スタックの破棄
NavigationActionsは普通のメソッドと何が違うのか
いつ使うのか
並列ページに対しても作用できる?
#やりたいこと
console.logでnavigationのスタック状況を確認したい
2回連続でbackしたいときはどうする?
navigation.pop(2)でいけるはず ref
navigation.pop(); navigation.pop()と同じ
にならないときもある、pop(2)では無理で、pop;popのときはいけるときがある、なんで #??
replaceはこういうときに使えるものなの?
そう。最初からpop*2することが決まっているならpushするところをreplaceにすればいい
a→b→replace(c)すれば、スタックはa,cになる
FCでnavigation.setOptionsをしたいとき
NavigationScreenComponentでFCの型付をしたらいい
code:tsx
const HogePage: NavigationScreenComponent<{}, {}> = () => (
<></>
);
HogePage.navigationOptions = () => ({
headerTitle: 'Hogeページ'
});
export default HogePage;
普通にFC内でかけるようになっていた ref
できれば親からnavigation受け取らなくてもできるようになると嬉しいんだけどなmrsekut.icon
つまりhooksが欲しい
ていうか関数内にいると邪魔だな、前のほうがいい
v5.1
https://reacttraining.com/blog/react-router-v5-1/
型の話
以下のようにして型を付けてあげればいい
code:ts
navigation: NavigationScreenProp<{}>;
{}の中にはparamsとかの型を書く?
pramsへの型付け
https://stackoverflow.com/questions/49180030/tslint-property-params-does-not-exist-on-type-navigationstate
型の付け方
v4のexampleを参考にする
むずくね?正解がわからん
v5のexampleは良い感じだが、v4はclassコンポーネントが多いので微妙に参考にならない
NavigationInjectedPropsを使う
code:ts
HogePage.navigationOptions = ({
navigation
}: NavigationInjectedProps) => ({
...
})
https://qiita.com/shinnoki/items/e32e20b812606ce7219c
動向
https://callstack.com/blog/custom-screen-transitions-in-react-navigation/
アニメーション